EC2 Image builderに入門してみた
こんにちは。AWS事業本部のKyoです。
「あのアカウントで使ってるAMIを使いたいなぁ。でもアカウント間を跨いでの共有はちょっと面倒だなぁ...。」 そんなことを話していたら、EC2 Image builder(以下、Image builder)用のBuild Componentファイルを共有してもらえることになりました。 これを活用するために、まずは手を動かしながらImage builderに入門してみることにしました。
Image builderとは?
EC2 Image Builderはソフトウェアで事前にインストールおよび設定、カスタマイズされた安全で最新の「ゴールデン」サーバーイメージの作成、管理、およびデプロイメントを自動化し、特定のIT標準を満たすための設定を行うAWSのマネージドサービスです(意訳)
ざっくりいうとAMIを作るためのツールです。Packerに似たツールというとイメージしやすいでしょうか。
re:Invent 2019で発表され、弊社スタッフも大量にブログを書いていました(関連記事のリンクを本記事の末尾につけておきます)。
入門してみる
キーワード
Image Builderを利用する前に、イメージを持っておいて欲しいキーワードがあります。
※いずれも公式ドキュメントを引用および機械翻訳したものです。
Build Components
ビルドコンポーネントは、ソフトウェアパッケージをダウンロード、インストール、および構成するための一連の手順を定義するオーケストレーションドキュメントです。また、検証とセキュリティ強化の手順も定義します。 コンポーネントは、YAMLドキュメント形式を使用して定義されます。
※同様にテストを定義するTest Componentsも存在します。
Recipes
Image Builderイメージレシピは、ソースイメージと、ソースイメージに適用して出力イメージに必要な構成を生成するコンポーネントを定義するドキュメントです。
Image pipelines
イメージパイプラインは、AWSで安全なOSイメージを構築するための自動化構成です。 Image Builderイメージパイプラインは、イメージビルドライフサイクルのビルド、検証、およびテストフェーズを定義するイメージレシピに関連付けられています。
簡単にまとめると、ソフトウェアのダウンロードやインストールを定義したyamlファイルがComponentで、ComponentをまとめてベースとなるAMIをの情報をまとめたものがRecipe、Recipeから実際にAMIを取得するパイプラインを定義したものがImage pipelineです。
やってみること
(Build, Test)Componentを作成、それを元にRecipeを作成します。そのRecipeを元にImage pipelineを作成し、AMIの取得までを行います。
文字と図にすると長く見えるのですが、実際行ってみるとシンプルです。
Components
まずはComponentの作成を行います。右上のCreate Componentから始めます。
Build componentの情報を入力します。Use build component example
にチェックを入れるとサンプルが入力されます。同様にTest componentもサンプルから作成します。
以下のように作成されます。
Recipes
Componentと同様に右上のボタンから始めます。
recipeの詳細を入力します。
今回は、Amazon Linux2のAMIをベースに先ほど作成した2つのCompornetを指定しました。
以下の様に作成されました。
Image pipelines
先ほど完成したrecipeの名前をクリックし、詳細画面へ移動、右上の Create pipeline from this recipe
をクリックします。
次にpipelineの設定を行います。
IAMロールが必要になります。今回はAdminを利用していますが、本番では最小権限のIAMロールを付与してください。
なお、IAMロールについてはこちらのドキュメントに記載がありEC2InstanceProfileForImageBuilder
およびAmazonSSMManagedInstanceCore
ポリシーを含むロールが必要とされています。
また、起動スケジュールの設定が可能です。スケジュール実行も可能ですが、今回はマニュアルを選択しました。
他に、AMI取得時に起動するインスタンスタイプや通知用のSNS、起動するVPC等の設定が可能です。加えて、トラブルシュートのため、AMI作成用のインスタンスにログインするための秘密鍵の設定やS3バケットへのログ出力も可能です。
※ S3にログ出力を行う場合には、追加のポリシーが必要になります。
次の画面でpipelineのオプショナルな設定が行えます。
ライセンス情報や、AMIの名前、タグ、公開範囲を設定可能です。
レビュー画面で確認後、以下の画面が表示されるので、Pipeline nameをクリックして詳細に移動します。
右上のActionsから Run pipelineをクリックします。
しばらくするとAMI取得のためEC2が起動します。ビルド用のインスタンスが起動、終了した後にテスト用のインスタンスが起動します。
なお、インスタンスタイプは指定しない場合、m5.large
で起動するようです。
以上でAMIが取得できました。
おわりに
簡単にImage builderに入門し、AMIを取得してみました。
今回は手動起動でしたが、文中で触れたように、スケジュール起動も可能です。 また、下記の関連記事にもありますように、CodePipelineとの連携により、Componentファイルの更新をトリガーにゴールデンイメージを自動生成する構成も可能となります。
かなり色々なことが出来るサービスなので、今後試してみたいと思います。
以上、何かのお役に立てれば幸いです。